Serial attached storage protocols, such as serial ATA (SATA) and serial Small Computer System Interface (SCSI) (SAS) are becoming more prevalent for connecting storage devices to a computer system. In computer systems implementing such serial storage devices, one storage device in the system may communicate with others. For example, a device requesting data (referred to as the initiator device) may receive data from a target device.
A storage device typically includes a direct memory access (DMA) engine to perform data transfer operations to assist in transferring input/output (I/O) data from (to) a host memory and to (from) a local memory. The DMA engine usually includes a Data Integrity Engine that performs desired data integrity checks (e.g., Cyclic Redundancy Checking (CRC), Application Tag check and/or Reference Tag check etc.). The Data Integrity Engine operates on data blocks which may or may not have data integrity field (DIF). A data block with no DIF typically includes a 512 B (or 520 B, 2 KB, 4 KB etc.). User Data Field and a data block with DIF is a data block appended with an 8 B Data Integrity Field (DIF), also referred to as Block Guard (BG).
When BG is enabled and either an Insert or Strip function is selected, the number of bytes transferred on the local interface of the DMA will not equal the number of bytes transferred on the host interface. Consequently, a programmer of the DMA engine accounts for the expansion or compression of the data stream across descriptors when the Insert or Strip functions are selected. Typically, the programming of the DMA engine (e.g., generating the descriptors by keeping track of the exact amount of user data versus the data integrity data that is being transferred across from the source to the destination) is done in firmware. Programming the DMA engine via firmware is a burden on the local processor, which results in less optimal overall performance. Also, the processor cannot keep up with the ever-increasing link rates, thus affecting the overall system I/O performance.